import axios from 'axios'
import { showNotify, showLoadingToast, closeToast } from 'vant'

// // 区别开发模式与生产模式，定义 baseURL
// // development: 开发模式
// // production: 生产模式
// const baseURL = import.meta.env.MODE === 'development' ? '开发环境的baseURL' : '生产环境的baseURL'
const baseURL = import.meta.env.MODE === 'development' ? 'http://162.14.108.31:3001' : 'http://test.com:9999'

// 创建实例
const service = axios.create({
  // baseURL: 'http://162.14.108.31:3001', // 请求资源的基准 URL
  baseURL,
  timeout: 10000, // 超时时间
  // withCredentials: true, // 如果想在跨域时，也在请求头中自动携带 cookie 传递到服务端，则配置
})

// 请求拦截
service.interceptors.request.use(config => {
  // 统一在发送请求时，进行加载提示
  showLoadingToast({
    message: '加载中...',
    duration: 0,
  })

  // 通常会在请求头中添加用户身份认证的 token 进行传递
  // TODO...
  const token = 'token string'
  if (token) {
    config.headers.token = token
  }

  return config
}, err => {
  // 关闭提示
  closeToast()
  // 拦截异常，统一进行提示
  showNotify({ type: 'danger', message: '请求拦截异常:' + err.message })
  return Promise.reject(err)
})

// 响应拦截
service.interceptors.response.use(response => {
  // 响应返回，将加载提示框关闭
  closeToast()

//   // 通常会对响应对象进行统一判断处理，根据后端与前端对接的规范来处理
//   if (response.status === 200) { // HTTP 状态码
//     // 获取后端响应的数据
//     const responseData = response.data
//     // 通常后端会有统一规范的数据结构
//     if (responseData.code === '200') {
//       return responseData.data
//     }
//     return Promise.reject(new Error('异常:' + responseData.message))
//   }

  // 将响应对象进行返回
  return response
}, err => {
  // 关闭提示
  closeToast()

  // 拦截异常，统一进行提示
  showNotify({ type: 'danger', message: '响应拦截异常:' + err.message })
  return Promise.reject(err)
})

export default service
